// utils/error-handler-simple.ts - 简化的错误处理
/** 用户友好的错误消息映射 */
const ERROR_MESSAGES: Record<number | string, string> = {
  // 网络错误
  [-1]: '网络连接失败，请检查网络后重试',
  
  // 客户端错误
  400: '请求参数有误，请重试',
  401: '登录已过期，请重新登录',
  403: '没有权限执行此操作',
  404: '请求的内容不存在',
  408: '请求超时，请重试',
  422: '数据格式有误，请检查后重试',
  429: '操作过于频繁，请稍后重试',
  
  // 服务器错误
  500: '服务器繁忙，请稍后重试',
  502: '服务器连接失败，请稍后重试',
  503: '服务暂时不可用，请稍后重试',
  504: '服务器响应超时，请稍后重试',
  
  // 微信相关错误
  40029: '微信授权已过期，请重新授权',
  'invalid code': '微信授权码无效，请重新授权',
  
  // 默认错误
  default: '操作失败，请重试'
};

/** 简化的错误处理器 */
export class SimpleErrorHandler {
  /** 获取用户友好的错误消息 */
  static getUserFriendlyMessage(error: any): string {
    // 检查错误状态码
    if (error.statusCode && ERROR_MESSAGES[error.statusCode]) {
      return ERROR_MESSAGES[error.statusCode];
    }
    
    // 检查错误消息中的关键词
    const message = error.message || error.errMsg || '';
    for (const [key, value] of Object.entries(ERROR_MESSAGES)) {
      if (typeof key === 'string' && message.includes(key)) {
        return value;
      }
    }
    
    // 返回默认消息
    return ERROR_MESSAGES.default;
  }

  /** 显示错误提示 */
  static showError(error: any, options: {
    title?: string;
    showModal?: boolean;
    duration?: number;
  } = {}): void {
    const {
      title,
      showModal = false,
      duration = 2000
    } = options;
    
    const message = this.getUserFriendlyMessage(error);
    
    if (showModal) {
      wx.showModal({
        title: title || '操作失败',
        content: message,
        showCancel: false,
        confirmText: '知道了'
      });
    } else {
      wx.showToast({
        title: message,
        icon: 'none',
        duration
      });
    }
  }

  /** 处理登录错误 */
  static handleLoginError(error: any): void {
    console.error('[Login] 登录失败:', error);
    
    // 特殊处理微信授权错误
    if (error.message?.includes('40029') || error.message?.includes('invalid code')) {
      wx.showToast({
        title: '微信授权已过期，请重新点击登录按钮',
        icon: 'none',
        duration: 3000
      });
      return;
    }
    
    // 显示通用错误
    this.showError(error);
  }

  /** 处理网络错误 */
  static handleNetworkError(error: any): void {
    console.error('[Network] 网络错误:', error);
    
    wx.showModal({
      title: '网络连接失败',
      content: '请检查网络连接后重试',
      confirmText: '重试',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 可以在这里添加重试逻辑
        }
      }
    });
  }

  /** 记录错误日志（可选） */
  static logError(error: any, context?: string): void {
    const errorInfo = {
      message: error.message || error.errMsg,
      statusCode: error.statusCode,
      context,
      timestamp: new Date().toISOString(),
      userAgent: 'WeChat-MiniProgram'
    };
    
    console.error('[ErrorLogger]', errorInfo);
    
    // 在生产环境可以上报到服务器
    // this.reportError(errorInfo);
  }
}

// 导出简化的错误处理函数
export const handleError = SimpleErrorHandler.showError.bind(SimpleErrorHandler);
export const handleLoginError = SimpleErrorHandler.handleLoginError.bind(SimpleErrorHandler);
export const handleNetworkError = SimpleErrorHandler.handleNetworkError.bind(SimpleErrorHandler);

export default SimpleErrorHandler;
